//按钮的代码
//点击按钮如何处理，是业务系统的事情
//应该提供INITButton函数，让用户可以提供OnPressed函数
//上层代码通过 这3个函数使用按钮

#include <ui.h>

//2、默认的绘制按钮的函数（规定位置颜色），下面3个函数在display——manager.c中
static int DefaultOnDraw(struct Button *ptButton, PDispBuff ptDispBuff)
{
	/* 绘制底色 */
	DrawRegion(&ptButton->tRegion, BUTTON_DEFAULT_COLOR); //默认为红

	/* 居中写文字 */
	SetFontSize(ptButton->iFontSize);//设置字体大小使用了库函数
	DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);

	/* flush to lcd/web */
	FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);//刷区域

	return 0;
}
//3、点击按钮变颜色
static int DefaultOnPressed(struct Button *ptButton, PDispBuff ptDispBuff, PInputEvent ptInputEvent)
{
	unsigned int dwColor = BUTTON_DEFAULT_COLOR;
	
	ptButton->status = !ptButton->status; //没次点击状态翻转0-1  1-0
	if (ptButton->status)
		dwColor = BUTTON_PRESSED_COLOR;

	//调用同样的函数就可以修改按钮的颜色了
	/* 绘制底色 */
	DrawRegion(&ptButton->tRegion, dwColor);

	/* 居中写文字 */
	DrawTextInRegionCentral(ptButton->name, &ptButton->tRegion, BUTTON_TEXT_COLOR);

	/* flush to lcd/web */
	FlushDisplayRegion(&ptButton->tRegion, ptDispBuff);
	
	return 0;
}

//1、初始化
void InitButton(PButton ptButton, char *name, PRegion ptRegion, ONDRAW_FUNC OnDraw, ONPRESSED_FUNC OnPressed)
{
	ptButton->status    = 0;//初始状态
	ptButton->name      = name;
	if (ptRegion)
		ptButton->tRegion = *ptRegion;
		//下面是原版，上面的改进是为了适应main_page.c中的调用
	//InitButton(pButton, GetItemCfgByIndex(i)->name, NULL, NULL, NULL);
	//参数为NULL时，就不执行赋值了
	/*ptButton->tRegion   = *ptRegion;*/   
	ptButton->OnDraw    = OnDraw ? OnDraw : DefaultOnDraw;//如果自己提供了，就用自己的，咩提供用上面定义的
	ptButton->OnPressed = OnPressed ? OnPressed : DefaultOnPressed;
	
}


